package com.david.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Rabbitmq是一个消息broker：接收消息，传递给下游应用
 *  Producing就是指发送消息，发送消息的程序是Producer,Queue指的是RabbitMQ内部的一个组件，消息存储于queue中。queue使用主机的内存
 *  和磁盘存储，受到内存和磁盘空间的限制。很多Producer可以向同一个queue发送消息，很多消费者可以从同一个queue消费消息。一个等待消费
 *  消息的应用程序称为Consumer。生产者、消费者、队列不必在同一台主机，一般都是在不同的主机上的应用。一个应用可以同时是生产者和消费者
 * @author David
 * @version V1.0
 * @Package com.david.rabbitmq
 * @date 2021/7/17 0:24
 */
public class HelloWorldProducer {

    private final static String QUEUE_NAME="david_hello";

    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //配置连接信息
        factory.setHost("192.168.219.203");
        factory.setVirtualHost("/");
        factory.setUsername("root");
        factory.setPassword("123456");
        factory.setPort(5672);

        try {
            Connection conn = factory.newConnection();
            Channel channel = conn.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, true, null);
            String message="david,hello world!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println("Producer 发送了一条消息："+message);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
    }
}
